return g_file_resolve_relative_path (self->repodir, path);
}
-/**
- * ensure_file_data_synced:
- *
- * Ensure that in case of a power cut, these files have the data we
- * want. See http://lwn.net/Articles/322823/
- */
-static gboolean
-ensure_file_data_synced (GFile *file,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- int fd = -1;
-
- if (!ot_unix_open_noatime (gs_file_get_path_cached (file), &fd, error))
- goto out;
-
- if (!ot_unix_fdatasync (fd, error))
- goto out;
-
- if (!ot_unix_close (fd, error))
- goto out;
- fd = -1;
-
- ret = TRUE;
- out:
- if (fd != -1)
- (void) close (fd);
- return ret;
-}
-
static gboolean
commit_loose_object_impl (OstreeRepo *self,
GFile *tempfile_path,
if (is_regular)
{
- if (!ensure_file_data_synced (tempfile_path, cancellable, error))
+ /* Ensure that in case of a power cut, these files have the data we
+ * want. See http://lwn.net/Articles/322823/
+ */
+ if (!gs_file_sync_data (tempfile_path, cancellable, error))
goto out;
}
if (g_file_info_get_file_type (temp_info) == G_FILE_TYPE_REGULAR)
{
- if (!ensure_file_data_synced (temp_file, cancellable, error))
+ if (!gs_file_sync_data (temp_file, cancellable, error))
goto out;
}
if (g_file_info_get_file_type (temp_info) == G_FILE_TYPE_REGULAR)
{
- if (!ensure_file_data_synced (file, cancellable, error))
+ if (!gs_file_sync_data (file, cancellable, error))
goto out;
}
}
ot_util_fatal_literal (error->message);
}
-/**
- * ot_unix_fdatasync:
- *
- * Like fdatasync(), but uses #GError, and handles EINTR.
- */
-gboolean
-ot_unix_fdatasync (int fd, GError **error)
-{
- int result;
- do
- result = fdatasync (fd);
- while (G_UNLIKELY (result != 0 && errno == EINTR));
- if (result != 0)
- {
- ot_util_set_error_from_errno (error, errno);
- return FALSE;
- }
- return TRUE;
-}
-
/**
* ot_unix_close:
*